#自定义函数
'''
def 函数名(参数，参数):
    函数体
    return 返回值
'''

"""

def func(data):
    '''将传入的参数分割为一个列表，使用逗号作为分隔符'''
    return data.split(',')  

if __name__ == '__main__':
#如果是直接执行该文件则执行下列内容；调用该文件情况下不执行
#函数调用
    data = func("nginx,tomcat,jboss,redis")
    print(data)
    print(func.__doc__)   #打印函数的注释部分

"""
"""
#函数参数注解

def func2(n1: int,n2: int,n3: int)-> int:  #这里仅仅是注释，也就是帮助，不会进行参数检查
    if isinstance(n1,int) and isinstance(n2,int) and isinstance(n3,int):
        print(sum([n1,n2,n3]))
    else:
        #如果参数异常，主动抛出异常
        raise TypeError('参数输入的类型错误')
    
"""
"""
#函数的参数类别
#形参 形式参数  ,带有=的参数叫做默认参数，再调用时不传递参数，但必须写在参数的后面
#实参 实际参数  ,带有=的参数叫做关键参数，可以在调用是无需按照指定的顺序传递
#在实参和形参中，一一对应传递的参数叫做位置参数或者普通参数
def func3(data1,data2,data3="nihao"):  #data 是占位使用，形式参数
    print(data1,data2,data3)

func3(data3="hello",data1="world",data2="abc")    #hello 是传入的参数，实际参数
"""
#参数补充
#动态参数(万能参数)
def func4(port,*agrs,ip='127.0.0.1',**kwargs):   #*接受所有的位置参数并封装成一个元组
    #**接受所有的关键字参数并封装成一个字典
    print("=======================")
    print("=======================")
    print(port)
    print(agrs)
    print(ip)
    print(kwargs)
    print("=======================")
func4(1,2,3,4,5,name="小明",ip="127.0.0.1")